home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 20 / 5 / DISK2058.ZIP / UNFAST.EXE / MIS.F < prev    next >
Text File  |  1980-01-01  |  16KB  |  877 lines

  1. ;MISSILE
  2. video=0b800h
  3.  
  4. ;To do...
  5. ; Computer intelligence.
  6. ; Move base.
  7.  
  8. const max_clouds=3,max_dots=60
  9. const cloud_len=5,dot_len=12
  10. const bx1=35,bx2=605,computer=1,human=0
  11. const sa=176,sf=192,windforce=150
  12. const key_repeat=3
  13. var by1,by2,x,rad,changing,active,volx
  14. var lasta1,lasta2,lastf1,lastf2,s
  15. var32 x1,x2,y1,y2,xi1,xi2,yi1,yi2,wi
  16. var dx,dy,dotxi,dotyi,score1,score2,first_dead,dead
  17. var compx,compy,p2
  18. var32 dotx,doty,wind_on_dot
  19.  
  20. cloud_data     ? max_clouds*cloud_len
  21. dot_data       ? max_dots*dot_len
  22. dots_available ? max_dots
  23.  
  24.  
  25. n=timer mod 200
  26. while n x=rnd:n--
  27. land=rnd and 3
  28.  
  29. #include keys.fi
  30. set_keys
  31.  
  32. proc set_dot(dp,dvalue)
  33.     {
  34.     pokeb dots_available+dp,dvalue
  35.     }
  36.  
  37. proc set_dots
  38.     {
  39.     fillb max_dots from dots_available with 0
  40.     m=dot_data
  41.     repeat max_dots
  42.     {
  43.     poke m+2,0
  44.     m+=dot_len
  45.     }
  46.     }
  47.  
  48. proc pscores
  49.     {
  50.     cursor 0,0:print bios score1;
  51.     cursor 0,74:print bios score2;
  52.     }
  53.  
  54. proc put_scale(psx)
  55.     {
  56.     colour 0
  57.     for x=psx to psx+83
  58.     for y=165 to 197
  59.     plot x,y
  60.     next y,x
  61.     colour 1
  62.  
  63.     for x=psx+4 to psx+79
  64.     plot x,sf+3
  65.     plot x,sf-1
  66.     plot x,sa+3
  67.     plot x,sa-1
  68.     next x
  69.  
  70.     for y=0 to 2
  71.     plot psx+4,y+sa
  72.     plot psx+79,y+sa
  73.     plot psx+4,y+sf
  74.     plot psx+79,y+sf
  75.     next y
  76.  
  77.     sprite psx+25,sa-8,sprite_angle
  78.     sprite psx+25,sf-8,sprite_force
  79.     }
  80.  
  81. proc draw_scales
  82.     {
  83.     put_scale(bx1-32)
  84.     put_scale(bx2-52)
  85.     }
  86.  
  87. proc phigh(hx,hy)
  88.     {
  89.     if rnd>-5000 then return
  90.     if (hx=volx) or (hx<0) or (hx>639) or (hy>199) or (hy<20) then return
  91.     for phy=hy-10 to hy
  92.       if point hx,phy then goto clear_top
  93.     next phy
  94.     return
  95.     clear_top:
  96.     colour 0
  97.     plot hx,phy
  98.     colour 1
  99.     }
  100.  
  101. proc abort
  102.     {
  103.     reset_keys
  104.     screen 3
  105.     terminate
  106.     }
  107.  
  108. proc cls_sp(cspx,cspy)
  109.     {
  110.     cspx-=4
  111.     if cspx<0 then cspx=0
  112.     sprite cspx,cspy,clear_sprite
  113.     }
  114.  
  115. proc set_speed
  116.     {
  117.     speed+=(rnd mod 151)-75
  118.     if speed<-600 then speed=-600
  119.     if speed>600  then speed=600
  120.     }
  121.  
  122. proc set_wind
  123.     {
  124.     wind=(rnd mod 1201)-600
  125.     set_speed
  126.     }
  127.  
  128. proc change_wind
  129.     {
  130.     if changing then changing--
  131.     else
  132.     {
  133.     changing=25
  134.     if wind<speed then wind++
  135.     if wind>speed then wind--
  136.     if wind=speed then set_speed
  137.     }
  138.     }
  139.  
  140. proc set_clouds
  141.     {
  142.     m=cloud_data
  143.     repeat max_clouds
  144.     {
  145.     poke m,0
  146.     m+=cloud_len
  147.     }
  148.     }
  149.  
  150. proc set_planes
  151.     {
  152.     }
  153.  
  154. proc set_martian
  155.     {
  156.     martianx=0
  157.     }
  158.  
  159. proc drawb(px,py)
  160.     {
  161.     sprite px-15,py-9,base_sprite
  162.     }
  163.  
  164. proc draw_base
  165.     {
  166.     drawb(bx1,by1)
  167.     drawb(bx2,by2)
  168.     }
  169.  
  170. proc lline(yto)
  171.     {
  172.     dot=2
  173.     for yto=yto to 199
  174.     if dot then
  175.     {
  176.     dot--
  177.     if rnd<0 then plot x,yto
  178.     }
  179.     else
  180.     {
  181.     pp=1
  182.     if land=1 then if (x xor yto) and 1 then pp=0
  183.     if land=2 then if yto and 1 then pp=0
  184.     if land=3 then pp=rnd and 7
  185.     if pp then plot x,yto
  186.     }
  187.     next yto
  188.     }
  189.  
  190. proc landscape
  191.     {
  192.     colour 1
  193.     lowest=200
  194.     const lbot=64,ltop=190
  195.     by1=(rnd mod 100)+62
  196.     for x=0 to 69:lline(by1):next x
  197.  
  198.     y=by1:yi=(rnd mod 401)-200
  199.     ylow=0
  200.     lastth=0
  201.  
  202.     volx=0:voly=200
  203.     for x=70 to 569
  204.     lx=rnd
  205.     lline(y)
  206.  
  207.     if (y<73) and (x>90) and (x<549) then
  208.     {
  209.     if (y<voly) or ((y<=voly) and (rnd>27500)) then
  210.         {
  211.         volx=x:voly=y
  212.         vol_speed=(rnd mod 6000)-28000
  213.         vol_depth=(rnd mod 8)+2
  214.         plot x,voly+2
  215.         active=0
  216.         lastth=10 ; No more huts/trees for 10 dots.
  217.         }
  218.     }
  219.  
  220.     if y<lowest then lowest=y
  221.     ylow+=yi
  222.     if ylow<-255 then
  223.     {
  224.     y-=(0-ylow)/255
  225.     ylow=0
  226.     }
  227.     if ylow>255 then
  228.     {
  229.     y+=ylow/255
  230.     ylow=0
  231.     }
  232.     if y<lbot then y=lbot:yi+=300
  233.     if y>ltop then y=ltop:yi-=300
  234.  
  235.     yi+=(lx/550)-59
  236.  
  237.     if lastth then lastth--
  238.     else
  239.     {
  240.     if (yi>0) and (yi<13) then
  241.         {
  242.         sprite x-7,y-10,sprite_tree:lastth=16
  243.         goto nextth
  244.         }
  245.     if (yi<0) and (yi>-8) then
  246.         {
  247.         sprite x-7,y-7,sprite_hut:lastth=16
  248.         }
  249.     nextth:
  250.     }
  251.  
  252.     if yi<-600 then yi+=250
  253.     if yi>600 then yi-=250
  254.     if (x>550) and (y>161) and (yi>-200) then yi-=200
  255.     next x
  256.  
  257.     if y>161 then y=161
  258.     by2=y
  259.     for x=570 to 639:lline(by2):next x
  260.     lowest-=15
  261.     }
  262.  
  263. proc draw_martian
  264.     {
  265.     }
  266.  
  267. proc draw_clouds
  268.     {
  269.     m=cloud_data
  270.     clw=lowest-8
  271.     repeat max_clouds
  272.     {
  273.     cx=peek m:cxl=peekb (m+2)
  274.     cy=peekb (m+3)
  275.     cs=peekb (m+4)
  276.     if not cx then
  277.         {
  278.         cxx=rnd
  279.         if cxx>32000 then
  280.         {
  281.         cy=cxx mod clw:cy+=8
  282.         cx=3:if wind<0 then cx=610
  283.         cs=rnd and 1
  284.         }
  285.         }
  286.     if cx then
  287.         {
  288.         if wind<-255 then cx--
  289.         if wind>255 then cx++
  290.         cxl+=(wind and 255)+cs*128
  291.         if cxl>255 then
  292.         {
  293.         if wind>0 then cx+=cxl/255 else cx-=cxl/255
  294.         cxl=0
  295.         }
  296.         if (cx<3) or (cx>610) then cls_sp(cx,cy):cx=0:goto store_cloud
  297.         sprite cx,cy,cloud_sprite+cs*12
  298.         }
  299.     store_cloud:
  300.     poke m,cx:pokeb m+2,cxl
  301.     pokeb m+3,cy
  302.     pokeb m+4,cs
  303.     m+=cloud_len
  304.     }
  305.     }
  306.  
  307. proc draw_planes
  308.     {
  309.     }
  310.  
  311. proc setup_players
  312.     {
  313.     x1=0:x2=0
  314.     angle1=40:angle2=40
  315.     force1=25:force2=25
  316.     lasta1=0:lasta2=0
  317.     lastf1=0:lastf2=0
  318.     compx=100:compy=by2+20
  319.     last_fire=0
  320.     }
  321.  
  322. proc fbox(bx,by)
  323.     {
  324.     if bx and 1 then
  325.     {
  326.     plot bx,by
  327.     plot bx,by+2
  328.     }
  329.     else plot bx,by+1
  330.     }
  331.  
  332. proc aflines
  333.     {
  334.     if angle1>lasta1 then
  335.     {
  336.     colour 1
  337.     for afx=lasta1 to angle1:fbox(bx1-28+afx,sa):next afx
  338.     }
  339.     if angle1<lasta1 then
  340.     {
  341.     colour 0
  342.     for afx=angle1+1 to lasta1:fbox(bx1-28+afx,sa):next afx
  343.     }
  344.  
  345.     if angle2>lasta2 then
  346.     {
  347.     colour 1
  348.     for afx=lasta2 to angle2:fbox(bx2-48+afx,sa):next afx
  349.     }
  350.     if angle2<lasta2 then
  351.     {
  352.     colour 0
  353.     for afx=angle2+1 to lasta2:fbox(bx2-48+afx,sa):next afx
  354.     }
  355.  
  356.  
  357.     if force1>lastf1 then
  358.     {
  359.     colour 1
  360.     for afx=lastf1 to force1:fbox(bx1-28+afx,sf):next afx
  361.     }
  362.     if force1<lastf1 then
  363.     {
  364.     colour 0
  365.     for afx=force1+1 to lastf1:fbox(bx1-28+afx,sf):next afx
  366.     }
  367.  
  368.     if force2>lastf2 then
  369.     {
  370.     colour 1
  371.     for afx=lastf2 to force2:fbox(bx2-48+afx,sf):next afx
  372.     }
  373.     if force2<lastf2 then
  374.     {
  375.     colour 0
  376.     for afx=force2+1 to lastf2:fbox(bx2-48+afx,sf):next afx
  377.     }
  378.  
  379.     lasta1=angle1
  380.     lasta2=angle2
  381.     lastf1=force1
  382.     lastf2=force2
  383.     }
  384.  
  385. proc move_player(pn)
  386.     {
  387.     if pn=1 then
  388.     {
  389.     if key_press(59) then angle1--
  390.     if key_press(60) then angle1++
  391.     if key_press(61) then force1--
  392.     if key_press(62) then force1++
  393.  
  394.     if angle1<0 then angle1=0
  395.     if angle1>74 then angle1=74
  396.     if force1<0 then force1=0
  397.     if force1>74 then force1=74
  398.     }
  399.     else
  400.     {
  401.     if key_press(71) then angle2--
  402.     if key_press(73) then angle2++
  403.     if key_press(79) then force2--
  404.     if key_press(81) then force2++
  405.  
  406.     if angle2<0 then angle2=0
  407.     if angle2>74 then angle2=74
  408.     if force2<0 then force2=0
  409.     if force2>74 then force2=74
  410.     }
  411.  
  412.     aflines
  413.     }
  414.  
  415. proc move_computer
  416.     {
  417.     if (high x2=0) then
  418.     {
  419.     if last_fire then last_fire--:return
  420.  
  421.     if compy<lowest then
  422.         {
  423.         if compy<20 then force2-=4:angle2--
  424.         force2--
  425.         goto fire_computer
  426.         }
  427.     if compx>(bx1+15) then
  428.         {
  429.         force2+=(compx-bx1)/30
  430.         if (angle2>38) and (by1<95) and (compy>by2)
  431.         then angle2-=(compy-by2)/15
  432.         if compx<240
  433.         then angle2-=(rnd and 7)=4
  434.         else angle2+=2
  435.         }
  436.     if compx<(bx1-7) then
  437.         {
  438.         if compy<by1
  439.         then force2-=(by1-compy)/9:angle2+=3
  440.         else angle2--
  441.         }
  442.  
  443.     fire_computer:
  444.  
  445.     if force2<0 then force2=0
  446.     if force2>74 then force2=74
  447.     if angle2<0 then angle2=0
  448.     if angle2>74 then angle2=74
  449.  
  450.     x2=bx2*65536
  451.     y2=(by2-11)*65536
  452.     xi2=force2*(90-angle2)*(100+(rnd mod 11))
  453.     yi2=angle2*force2*70
  454.     last_fire=20
  455.     }
  456.     }
  457.  
  458. function mis(sx,sy)
  459.     {
  460.     sx-=2:sy--
  461.     tpoint=0
  462.     for ma=1 to 3
  463.     if point sx+ma,sy then tpoint=1
  464.     plot sx+ma,sy
  465.     if point sx+ma,(sy+2) then tpoint=1
  466.     plot sx+ma,sy+2
  467.     next ma
  468.  
  469.     for ma=0 to 4
  470.     if point sx+ma,(sy+1) then tpoint=1
  471.     plot sx+ma,sy+1
  472.     next ma
  473.  
  474.     return tpoint
  475.     }
  476.  
  477. proc put_dot(pdx,pdy)
  478.     {
  479.     pdm=dot_data
  480.     colour 0:plot pdx,pdy
  481.     dv=searchb max_dots from dots_available for 0
  482.     if dv then
  483.     {
  484.     dv-=dots_available
  485.     set_dot(dv,1)
  486.     pdm=dot_data+dv*dot_len
  487.     poke pdm+2,pdx:poke pdm+6,pdy
  488.     poke pdm+8,(rnd mod 1601)-800
  489.     poke pdm+10,rnd mod 600
  490.     }
  491.     }
  492.  
  493. proc crater(cx,cy,p)
  494.     {
  495.     disable interupts
  496.     for cx=cx-4 to cx+4
  497.     for ca=cy-2 to cy+3
  498.     put_dot(cx,ca)
  499.     next ca
  500.  
  501.     if cy>60 then
  502.     {
  503.     for cry=cy-(rnd and 15)-20 to cy-3
  504.     if point cx,cry then put_dot(cx,cry)
  505.     next cry
  506.     }
  507.  
  508.     next cx
  509.     enable interupts
  510.     }
  511.  
  512. proc volcanoe
  513.     {
  514.     if volx then
  515.     {
  516.     if (point volx,(voly+2)) and (voly<85) then
  517.         {
  518.         if (active<>0) and (rnd<vol_speed) then put_dot(volx,voly+vol_depth)
  519.         if rnd>32450 then active=not active
  520.         }
  521.     if not point volx,(voly+2) then
  522.         {
  523.         voly++
  524.         vol_speed+=800
  525.         }
  526.     }
  527.     }
  528.  
  529. proc draw_dots
  530.     {
  531.     m=dot_data
  532.     nlen=0
  533.     if wind>0
  534.       then wind_on_dot=wind*200
  535.       else wind_on_dot=0-((65536-wind)*200)
  536.     for dot_count=0 to max_dots-1
  537.     dotx=peek m
  538.     if high dotx then
  539.         {
  540.         doty=peek (m+4)
  541.         dotxi=peek (m+8)
  542.         dotyi=peek (m+10)
  543.  
  544.         dy=high doty
  545.         if (dy>=0) then colour 0:plot high dotx,dy
  546.         dotx+=wind_on_dot
  547.         if dotxi>0
  548.           then dotx+=dotxi*256
  549.           else dotx-=(65536-dotxi)*256
  550.         if dotyi>0
  551.           then doty-=dotyi*256
  552.           else doty+=(65536-dotyi)*256
  553.  
  554.         dotyi-=10
  555.         dx=high dotx:dy=high doty
  556.         if (dx<0) or (dx>639) or (dy>195) then goto clear_dot
  557.  
  558.         if (dx<>0) and (dy>=0)
  559.           then if point dx,dy then
  560.         {
  561.         clear_dot:
  562.         phigh(dx,dy)
  563.         dotx=0:dx=0:set_dot(dot_count,0)
  564.         }
  565.         if (dx<>0) and (dy>=0) then
  566.         {
  567.         colour 1:plot dx,dy
  568.         nlen++
  569.         }
  570.  
  571.         poke m,low dotx:poke m+2,high dotx
  572.         poke m+4,low doty:poke m+6,high doty
  573.         poke m+8,dotxi
  574.         poke m+10,dotyi
  575.         }
  576.     m+=dot_len
  577.     next dot_count
  578.     while nlen
  579.     {
  580.     noise 1,7000+(rnd and 2047)
  581.     nlen--
  582.     }
  583.     noise off
  584.     }
  585.  
  586. proc missiles
  587.     {
  588.     iwx=abs wind
  589.     if not dead then
  590.     {
  591.     if (high x1=0) and (key_press(41)) then
  592.         {
  593.         x1=bx1*65536
  594.         y1=(by1-11)*65536
  595.         xi1=force1*(90-angle1)*(100+(rnd mod 11))
  596.         yi1=angle1*force1*70
  597.         }
  598.     if (high x2=0) and (key_press(80)) then
  599.         {
  600.         x2=bx2*65536
  601.         y2=(by2-11)*65536
  602.         xi2=force2*(90-angle2)*(100+(rnd mod 11))
  603.         yi2=angle2*force2*70
  604.         }
  605.     }
  606.  
  607.     if high x1 then
  608.     {
  609.     idy=high y1
  610.     if idy>0 then colour 0:touch=mis(high x1,high y1)
  611.     x1+=xi1
  612.     iwi=(windforce+idy)*iwx
  613.     if idy>0 then if wind<0 then x1-=iwi else x1+=iwi
  614.     y1-=yi1
  615.     yi1-=2150
  616.     idx=high x1:idy=high y1
  617.     if (idx<3) or (idx>635) or (idy>192) then x1=0
  618.     if idy>164 then
  619.         {
  620.         if (idx<70) or (idx>570) then x1=0
  621.         }
  622.     if high x1 then
  623.         {
  624.         touch=0
  625.         if idy>0 then colour 1:touch=mis(idx,idy)
  626.         if touch then
  627.         {
  628.         colour 0:touch=mis(idx,idy)
  629.         x1=0
  630.         crater(idx,idy,1)
  631.         }
  632.         }
  633.     }
  634.  
  635.     if high x2 then
  636.     {
  637.     idy=high y2
  638.     if idy>0 then colour 0:touch=mis(high x2,high y2)
  639.     x2-=xi2
  640.     iwi=(windforce+idy)*iwx
  641.     if idy>0 then if wind<0 then x2-=iwi else x2+=iwi
  642.     y2-=yi2
  643.     yi2-=2300
  644.     idx=high x2:idy=high y2
  645.     compx=idx:compy=idy
  646.     if (idx<3) or (idx>635) or (idy>192) then x2=0
  647.     if idy>164 then
  648.         {
  649.         if (idx<70) or (idx>570) then x2=0
  650.         }
  651.     if high x2 then
  652.         {
  653.         touch=0
  654.         if idy>0 then colour 1:touch=mis(idx,idy)
  655.         if touch then
  656.         {
  657.         colour 0:touch=mis(idx,idy)
  658.         x2=0
  659.         crater(idx,idy,2)
  660.         }
  661.         }
  662.     }
  663.     }
  664.  
  665. function alive
  666.     {
  667.     if not first_dead then
  668.     {
  669.     for x=bx1-3 to bx1+3
  670.     if not point x,(by1-2) then first_dead=1
  671.     if not point x+(bx2-bx1),(by2-2) then first_dead=2
  672.     next x
  673.     if first_dead then
  674.         {
  675.         if first_dead=2 then ax=bx2:ay=by2 else ax=bx1:ay=by1
  676.         for x=ax-14 to ax+14
  677.         for y=ay-9 to ay
  678.         put_dot(x,y)
  679.         next y,x
  680.         }
  681.     }
  682.     return first_dead
  683.     }
  684.  
  685. proc setup
  686.     {
  687.     screen 6:colour 0:cls
  688.     mode 640,and
  689.  
  690.     landscape
  691.     draw_base
  692.     set_wind
  693.     set_clouds
  694.     set_planes
  695.     set_dots
  696.     set_martian
  697.     draw_scales
  698.  
  699.     pscores
  700.     }
  701.  
  702. proc start_playing
  703.     {
  704.     on int 1
  705.     {
  706.     push i9k,ka,cx,cy,p,cry,pdx,pdy,pdm,dv,dp,dvalue
  707.     push colour
  708.     if not dead then
  709.         {
  710.         move_player(1)
  711.         if p2=computer then move_computer else move_player(2)
  712.         }
  713.     missiles
  714.     pop colour
  715.     pop dvalue,dp,dv,pdm,pdy,pdx,cry,p,cy,cx,ka,i9k
  716.     }
  717.     clocks 25000  ;1.19MHz / fifty = 50Hz
  718.     }
  719.  
  720. proc stop_playing
  721.     {
  722.     stop int 1
  723.     out 43h,36h  ;Interupt timer set back to original speed.
  724.     out 40h,0
  725.     out 40h,0
  726.     }
  727.  
  728. start:
  729. score1=0:score2=0
  730. setup
  731.  
  732. continue_wait:
  733. forever
  734.     {
  735.     draw_clouds
  736.     draw_planes
  737.     draw_dots
  738.     draw_martian
  739.     volcanoe
  740.     change_wind
  741.  
  742.     cursor 0,26:print bios "N U C L E A R    A T T A C K"
  743.     cursor 3,26:print bios "1=ONE PLAYER   2=TWO PLAYERS"
  744.     if key_press(2) then p2=computer:goto begin_play
  745.     if key_press(3) then p2=human:goto begin_play
  746.     if key_press(1) then abort
  747.     }
  748.  
  749. begin_play:
  750. cursor 0,26:print bios "                            "
  751. cursor 3,25:print bios "                              "
  752.  
  753. next_landscape:
  754. while keypressed k=key
  755. first_dead=0
  756. setup_players
  757. dead=0
  758.  
  759. start_playing
  760. while not dead
  761.     {
  762.     if key_press(1) then
  763.     {
  764.     stop_playing
  765.     abort
  766.     }
  767.     draw_clouds
  768.     draw_planes
  769.     draw_dots
  770.     draw_martian
  771.     volcanoe
  772.     change_wind
  773.     dead=alive
  774.     }
  775.  
  776. repeat 320 ; Continue screen display for a short while.
  777.     {
  778.     draw_clouds
  779.     draw_planes
  780.     draw_dots
  781.     draw_martian
  782.     volcanoe
  783.     change_wind
  784.     }
  785.  
  786. stop_playing
  787.  
  788. if dead=1 then score2+=500 else score1+=500
  789. pscores
  790. old_land=land
  791. while old_land=land land=rnd and 3 ;Get new land pattern.
  792.  
  793. setup
  794. goto next_landscape
  795.  
  796. base_sprite:
  797. datab 2,10
  798. shape "              **                "
  799. shape "           ********             "
  800. shape "     *********************      "
  801. shape "     *** * * * * * * * ***      "
  802. shape "    **** * * * * * * * ****     "
  803. shape "   **** ***         *** ****    "
  804. shape "  **** ****************** ****  "
  805. shape "  ****************************  "
  806. shape "  ****************************  "
  807. shape "  ****************************  "
  808.  
  809. sprite_tree:
  810. datab 1,12
  811. shape "     * * *      "
  812. shape "     *  * **    "
  813. shape "   ** *  * **   "
  814. shape "    *  ** *     "
  815. shape "     *****  *   "
  816. shape "       ** **    "
  817. shape "    ******      "
  818. shape "      ***       "
  819. shape "      ***       "
  820. shape "      ***       "
  821. shape "     ****       "
  822. shape "     ** ***     "
  823.  
  824. sprite_hut:
  825. datab 1,8
  826. shape "     **         "
  827. shape "   **********   "
  828. shape " ************** "
  829. shape "  ************  "
  830. shape "  ***   **   *  "
  831. shape "  ***   **   *  "
  832. shape "  ***   ******  "
  833. shape "  ***   ******  "
  834.  
  835. clear_sprite:
  836. datab 2,7
  837. shape "                                "
  838. shape "                                "
  839. shape "                                "
  840. shape "                                "
  841. shape "                                "
  842. shape "                                "
  843. shape "                                "
  844.  
  845. cloud_sprite:
  846. datab 1,5
  847. shape "     *******    "
  848. shape "    **     **   "
  849. shape "     **   **    "
  850. shape "       *** **   "
  851. shape "                "
  852.  
  853. datab 2,7
  854. shape "       ****     ***********     "
  855. shape "     ***  ********        **    "
  856. shape "    **                    **    "
  857. shape "     **                  **     "
  858. shape "      **                **      "
  859. shape "       *****     ****** ***     "
  860. shape "           *******    ****      "
  861.  
  862. sprite_angle:
  863. datab 2,5
  864. shape "****  ****  ****  *     ****    "
  865. shape "*  *  *  *  *     *     *       "
  866. shape "****  *  *  *  *  *     ***     "
  867. shape "*  *  *  *  *  *  *     *       "
  868. shape "*  *  *  *  ****  ****  ****    "
  869.  
  870. sprite_force:
  871. datab 2,5
  872. shape "****  ****  ****  ****  ****    "
  873. shape "*     *  *  *  *  *     *       "
  874. shape "***   *  *  ****  *     ***     "
  875. shape "*     *  *  * *   *     *       "
  876. shape "*     ****  *  *  ****  ****    "
  877.